package com.hyg.module_third_party_demo.activity;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.alibaba.android.arouter.facade.annotation.Route;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.hyg.lib_common.Base.BaseActivity;
import com.hyg.lib_common.constant.Constants;
import com.hyg.module_third_party_demo.R;

import java.io.File;
import java.lang.annotation.Target;

@Route(path = Constants.PATH_ACTIVITY_MODULE_DEMO_GLIDE)
public class GlideActivity extends BaseActivity {

    ImageView show_top;
    ImageView show_middle;
    ImageView show_bottom;
    ImageView show_circle;
    String path;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_glide);
        init();
    }

    public void init() {
        initView();
    }

    public void initView() {
        path = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605592853170&di=ae98795bf94a72583b28e5a758b75593&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F30%2F29%2F01300000201438121627296084016.jpg";
        show_top = findViewById(R.id.img_show_top);
        show_middle = findViewById(R.id.img_show_middle);
        show_bottom = findViewById(R.id.img_show_bottom);
        show_circle = findViewById(R.id.img_show_circle);
        show_top.setImageResource(R.drawable.bg_monkey_king);
        Glide.with(this).load(path).into(show_middle);
        setCornerImage(path);
        setCircleImage(path);
    }


    /**
     * description 圆角图片
     * @author visitant
     * @time 2020/11/17 13:12
     */
    public void setCornerImage(String path) {
        RoundedCorners roundedCorners = new RoundedCorners(20);//数字为圆角度数
        RequestOptions coverRequestOptions = new RequestOptions()
                .transforms(new CenterCrop(), roundedCorners)
                .diskCacheStrategy(DiskCacheStrategy.NONE)//不做磁盘缓存
                .skipMemoryCache(true);//不做内存缓存
        //Glide 加载图片简单用法
        Glide.with(this).load(path)
                .apply(coverRequestOptions).into(show_bottom);
    }

    /**
     * @param path 图片地址
     * @ description 描述：显示圆形图片
     * @author visitant
     * @time 2020/11/17 13:12
     */
    public void setCircleImage(String path) {
        Glide.with(this)
                .load(path)
//                .dontAnimate()//添加这行代码,解决首次不加载的bug
                .apply(RequestOptions.bitmapTransform(new CircleCrop()))
                .into(show_circle);
    }

    /**
     * description 其他类型下载
     * @author visitant
     * @time 2020/11/17 13:20
     */
    public void glideSetting(ImageView imageView) {
        // 加载本地图片
        File file = new File(getExternalCacheDir() + "/image.jpg");
        Glide.with(this).load(file).into(imageView);

        // 加载应用资源
        int resource = R.drawable.bg_girl;
        Glide.with(this).load(resource).into(imageView);

//        // 加载二进制流
//        byte[] image = getImageBytes();
//        Glide.with(this).load(image).into(imageView);
//
//        // 加载Uri对象
//        Uri imageUri = getImageUri();
//        Glide.with(this).load(imageUri).into(imageView);


        //加载带有占位图
        String url = "";
        Glide.with(this).load(url).placeholder(R.drawable.bg_girl).into(imageView);

        //加载失败 放置占位符
        Glide.with(this).load(url).placeholder(R.drawable.bg_girl).error(R.drawable.bg_monkey)
                .diskCacheStrategy(DiskCacheStrategy.NONE)//关闭Glide的硬盘缓存机制
                .into(imageView);

        //设置原图展示
//        Glide.with(imageView).load(url).apply(new RequestOptions().override(Target.SIZE_ORIGINAL)).into(imageView);




        //加载指定格式的图片--指定为静止图片
        Glide.with(this)
                .asBitmap()//只加载静态图片，如果是git图片则只加载第一帧。
                .load(url)
                .placeholder(R.drawable.bg_girl)
                .error(R.drawable.bg_girl)
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .into(imageView);

        //加载动态图片
        Glide.with(this)
                .asGif()//加载动态图片，若现有图片为非gif图片，则直接加载错误占位图。
                .load(url)
                .placeholder(R.drawable.bg_girl)
                .error(R.drawable.bg_monkey)
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .into(imageView);

        //加载指定大小的图片
        Glide.with(this)
                .load(url)
                .placeholder(R.drawable.bg_girl)
                .error(R.drawable.bg_monkey)
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .override(100, 100)//指定图片大小
                .into(imageView);

        //关闭框架的内存缓存机制
        Glide.with(this)
                .load(url)
                .skipMemoryCache(true)  //传入参数为false时，则关闭内存缓存。
                .into(imageView);
        //关闭硬盘的缓存
        Glide.with(this)
                .load(url)
                .diskCacheStrategy(DiskCacheStrategy.NONE)     //关闭硬盘缓存操作
                .into(imageView);

        //其他参数表示：
        //DiskCacheStrategy.NONE： 表示不缓存任何内容。
        //DiskCacheStrategy.SOURCE： 表示只缓存原始图片。
        //DiskCacheStrategy.RESULT： 表示只缓存转换过后的图片（默认选项）。
        //DiskCacheStrategy.ALL ： 表示既缓存原始图片，也缓存转换过后的图片。
    }


    /**
     * @param context 上下文
     * @param url     图片地址
     * @author visitant
     * @time 2020/11/17 13:19
     * @description 下载图片
     */
    @SuppressLint("StaticFieldLeak")
    public void downloadImage(Context context, String url) {
        new AsyncTask<Void, Void, Bitmap>() {

            @Override
            protected Bitmap doInBackground(Void... params) {
                Bitmap bitmap = null;
                try {
                    bitmap = Glide.with(context)
                            .asBitmap()
                            .load(url)
                            //360*480,原始大小设置为Target.SIZE_ORIGINAL
                            .submit(360, 480).get();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return bitmap;
            }

            @Override
            protected void onPostExecute(Bitmap bitmap) {

            }
        }.execute();
    }


    /**
     * @description 获取drawable对象
     * @author visitant
     * @time 2020/11/17 13:20
     */
    public void getDrawable(Context context, String url) {
        Glide.with(context).load(url)
//                .apply(coverRequestOptions)
                .into(new SimpleTarget<Drawable>() {
                    @Override
                    public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
//                imageView.setImageDrawable(resource);

                    }
                });
    }

}